home *** CD-ROM | disk | FTP | other *** search
- //----------------------------------------------------------------------------
- //Borland C++Builder
- //Copyright (c) 1987, 1997 Borland International Inc. All Rights Reserved.
- //----------------------------------------------------------------------------
- #include <vcl\vcl.h>
- #pragma hdrstop
-
- #include "ndxrebu.h"
- //---------------------------------------------------------------------------
- #pragma resource "*.dfm"
- TForm1 *Form1;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
-
- // Set up the exception handler.
- Application->OnException = HandleExceptions;
-
- // Populate the Alias drop down with the currently defined aliases.
- Screen->Cursor = crHourGlass;
- try {
- Session->GetAliasNames(cbAlias->Items);
- cbAlias->ItemIndex = 0;
- }
- catch (...) {} // dummy catch block to guarantee we get here.
- Screen->Cursor = crDefault;
-
- // Now, get the table name for the first index in the list.
- cbAliasChange(NULL);
- }
- //---------------------------------------------------------------------
-
- void __fastcall TForm1::HandleExceptions(TObject *Sender, Exception *E)
- {
- if (E->Message.Length())
- {
- Screen->Cursor = crArrow;
- MessageDlg(E->Message, mtError, TMsgDlgButtons() << mbOK, 0);
- }
- }
-
- void __fastcall TForm1::cbAliasChange(TObject *Sender)
- {
- // Get the tables in the new index.
- Screen->Cursor = crHourGlass;
- try {
- Session->GetTableNames(cbAlias->Items->Strings[cbAlias->ItemIndex],
- "", True, False, cbTable->Items);
- cbTable->Items->Insert(0, "<All Tables>");
- cbTable->ItemIndex = 0;
- }
- catch (...) {} // dummy catch block to guarantee we get here.
- Screen->Cursor = crDefault;
- }
- //---------------------------------------------------------------------
- void __fastcall TForm1::BitBtn1Click(TObject *Sender)
- {
- AnsiString strTable;
- int Counter;
- int iNTables;
- AnsiString strError;
- char strMsg[1024];
-
- strError = "";
- if (cbTable->ItemIndex > 0)
- {
- if (!RebuildIndexes(cbAlias->Items->Strings[cbAlias->ItemIndex],
- cbTable->Items->Strings[cbTable->ItemIndex],
- strError)) {
- wsprintf(strMsg,
- "Unable to rebuild indexes for %s. Reason: %s",
- cbTable->Items->Strings[cbTable->ItemIndex].c_str(),
- strError.c_str());
- MessageDlg(strMsg, mtError, TMsgDlgButtons() << mbOK, 0);
- }
- }
- else
- {
- iNTables = cbTable->Items->Count;
- for (Counter = 1; Counter <= cbTable->Items->Count - 1; Counter++) {
- StatusBar1->Panels->Items[1]->Text = AnsiString(iNTables - Counter);
- StatusBar1->Update();
- if (!RebuildIndexes(cbAlias->Items->Strings[cbAlias->ItemIndex],
- cbTable->Items->Strings[Counter],
- strError)){
- wsprintf(strMsg,
- "Unable to rebuild indexes for %s. Reason: %s",
- cbTable->Items->Strings[Counter].c_str(),
- strError.c_str());
- MessageDlg(strMsg, mtError, TMsgDlgButtons() << mbOK, 0 );
- }
- }
- StatusBar1->Panels->Items[1]->Text = " ";
- StatusBar1->Update();
- }
- }
- //---------------------------------------------------------------------
-
- bool __fastcall TForm1::RebuildIndexes(AnsiString strAlias, AnsiString strTable,
- AnsiString& strError)
- {
- bool Result = False;
- DBIResult bdeResult;
-
- if (tblIndex->Active) tblIndex->Active = False;
-
- tblIndex->DatabaseName = strAlias;
- tblIndex->TableName = strTable;
-
- Screen->Cursor = crHourGlass;
- try {
- WriteMsg("Opening " + strTable + "...");
- tblIndex->Open();
- }
- catch (...) {}
- Screen->Cursor = crDefault;
-
- if (!tblIndex->Active)
- strError = "The table could not be opened exclusively. It is " \
- "probably being used by another user or application.";
- else {
- WriteMsg("Regenerating indexes for " + strTable + "...");
- Screen->Cursor = crHourGlass;
- try {
- bdeResult = DbiRegenIndexes(tblIndex->Handle);
- switch (bdeResult) {
- case DBIERR_NONE: Result = True; break;
- case DBIERR_INVALIDHNDL: strError = "Invalid table handle."; break;
- case DBIERR_NEEDEXCLACCESS: strError = "Table is open in shared mode."; break;
- case DBIERR_NOTSUPPORTED: strError = "Remote indexes cannot be rebuilt."; break;
- default: strError = "Unexpected Error Returned by BDE.";
- }
- }
- catch (...) {}
- Screen->Cursor = crDefault;
- }
- WriteMsg("");
- return Result;
- }
-
- void __fastcall TForm1::WriteMsg(AnsiString strWrite)
- {
- StatusBar1->Panels->Items[0]->Text = strWrite;
- StatusBar1->Update();
- }
-